package com.wenx.v3system.modular.cloud.domain.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import java.util.List;

/**
 * 系统用户权限查询DTO
 * 用于通用权限验证接口，支持多种查询类型
 */
@Data
@Schema(description = "系统用户权限查询参数")
public class SysUserPermissionQueryDto {

    /**
     * 用户ID
     */
    @NotNull(message = "用户ID不能为空")
    @Schema(description = "用户ID", example = "1001")
    private Long userId;

    /**
     * 查询类型
     * HAS_PERMISSION: 检查单个权限
     * HAS_ANY: 检查任意权限
     * HAS_ALL: 检查所有权限
     * HAS_ROLE: 检查角色
     * HAS_ANY_ROLE: 检查任意角色
     */
    @NotBlank(message = "查询类型不能为空")
    @Schema(description = "查询类型", example = "HAS_PERMISSION", 
            allowableValues = {"HAS_PERMISSION", "HAS_ANY", "HAS_ALL", "HAS_ROLE", "HAS_ANY_ROLE"})
    private String queryType;

    /**
     * 单个权限标识
     * 当queryType为HAS_PERMISSION时使用
     */
    @Schema(description = "权限标识", example = "user:read")
    private String permission;

    /**
     * 权限列表
     * 当queryType为HAS_ANY或HAS_ALL时使用
     */
    @Schema(description = "权限标识列表", example = "[\"user:read\", \"user:write\"]")
    private List<String> permissions;

    /**
     * 单个角色ID
     * 当queryType为HAS_ROLE时使用
     */
    @Schema(description = "角色ID", example = "2001")
    private Long roleId;

    /**
     * 角色ID列表
     * 当queryType为HAS_ANY_ROLE时使用
     */
    @Schema(description = "角色ID列表", example = "[2001, 2002]")
    private List<Long> roleIds;

    /**
     * 部门ID（可选）
     * 用于部门级权限验证
     */
    @Schema(description = "部门ID", example = "3001")
    private Long departmentId;
} 